import java.util.Arrays;
import java.util.Scanner;

//给定一个有序整型数组, 实现二分查找
public class Question4 {

    public static void main(String[] args) {

        int[] arr = {  5, 6, 7, 8, 9, 10 };//给定一个有序整型数组
        System.out.println("给定的数组为："+ Arrays.toString(arr));
        System.out.println("请输入目标元素：");
        Scanner sc = new Scanner(System.in);
        int target = sc.nextInt();

        int targetOder = search(arr,target);//目标元素的下标

        System.out.println("目标元素的下标为："+targetOder) ;

    }

    public static int search(int[] arr, int target) {//target，目标元素。
        // 返回查找到的目标元素的下标
        int i = 0;
        int j = arr.length - 1;//i<=j

        while (i < j) {//这里理论上没有问题，这种分情况的方式，分了三种，用分支语句实现，
            // 但是……就是自己还是有点绕不过来时的，感觉别扭，
            // 尤其是为相邻数的时候，虽然是自己写的，但是，还是觉得别扭

            //不过，情况考虑完全，可着一种分情况的方法来做，想全了，就没问题

            if (target < arr[(i + j)/2]){

                j = (i + j)/2;

            }else if(target == arr[(i + j)/2]){

                return (i + j)/2;

            }else {

                i =(i + j)/2;

            }
        }
        return i;



    }

}
